package co.gov.medellin.ssti.sub.paoyer.administration.exception;

import co.gov.medellin.ssti.sub.paoyer.common.exception.ExceptionIdNotFound;
import co.gov.medellin.ssti.sub.paoyer.common.exception.ExceptionVO;
import co.gov.medellin.ssti.sub.paoyer.common.exception.ModuleExceptionInterface;
import co.gov.medellin.ssti.sub.paoyer.common.exception.ModuleVO;

public class AdministrationSystemException implements ModuleExceptionInterface {

	/**
	 * Informacion del modulo al que pertenece el error.
	 */
	private static final int ADMIN_MODULE = 1;

	/**
	 * Error al tratar de encriptar el password.
	 */
	public static final int COULDNT_ENCRYPT_PASSWORD = ADMIN_MODULE
			* SYSTEM_EXCEPTION + 1;

	/**
	 * Devuelve el ExceptionVO dependiendo el Id del mensaje
	 * 
	 * @param messageId
	 *            int Identificador del Mensaje. Este Mensaje tiene que estar
	 *            Definido como constante.
	 * @throws SystemException
	 * @return ExceptionVO
	 */
	public ExceptionVO getExceptionVO(int exceptionId)
			throws ExceptionIdNotFound {

		switch (exceptionId) {

		case COULDNT_ENCRYPT_PASSWORD:
			return new ExceptionVO(
					COULDNT_ENCRYPT_PASSWORD,
					ADMIN_MODULE,
					"No se pudo realizar la encriptacion de los passwords",
					"La encriptacion puede no haber podido ser realizada debido a la "
							+ "no existencia del algoritmo de encriptamiento configurado.");
		default:
			throw new ExceptionIdNotFound(exceptionId);
		}
	}

	/**
	 * Obtiene un objeto <code>ModuleVO</code> que contiene el nombre del modulo
	 * y la clase que maneja las excepciones.
	 * 
	 * @return Objeto <code>ModuleVO</code> que contiene el nombre del modulo y
	 *         la clase que maneja las excepciones.
	 */
	public ModuleVO getModuleVO() {

		return new ModuleVO("ADMINISTRATION", this.getClass().getName());
	}
}